#include "Compuesto.h"

Compuesto::Compuesto(){
	this->cantidadComponentes = 0;
}

void Compuesto::addComponente(ComponenteAlmacenamiento *componente){
	if(componente==NULL)
		throw new NullPointerException();

	ComponenteAlmacenamiento **auxiliar;
	auxiliar = (ComponenteAlmacenamiento**) realloc(this->componentes,sizeof(ComponenteAlmacenamiento*)*this->cantidadComponentes+1);
	if(auxiliar==NULL)
		throw new CompuestoException(CompuestoException::add);
	this->componentes = auxiliar;
	this->componentes[this->cantidadComponentes] = componente;
	this->cantidadComponentes++;
}

void Compuesto::deleteComponentAt(int index){
     if(this->cantidadComponentes <= index)
         throw new CompuestoException(CompuestoException::get);
     int i;
     for(i=index;i<(this->cantidadComponentes-1);i++){
         this->componentes[i] = this->componentes[i+1];
     }
     this->cantidadComponentes--;
     this->componentes = (ComponenteAlmacenamiento**) realloc(this->componentes,sizeof(ComponenteAlmacenamiento*)*this->cantidadComponentes);
}


ComponenteAlmacenamiento* Compuesto::getComponenteAt(int index){
	if(index>=this->cantidadComponentes)
		throw new CompuestoException(CompuestoException::get);
	return this->componentes[index];
}

int Compuesto::getCantidadComponentes(){
	return this->cantidadComponentes;
}

Compuesto::~Compuesto(){
	free(this->componentes);
}

